package com.mrd.modules.system.controller;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import com.mrd.base.utils.R;
import com.mrd.base.utils.ShiroUtils;
import com.mrd.modules.system.service.SysUserService;


@Controller
public class SysLoginController {
  @Autowired
  private Producer producer;
  @Autowired
  private SysUserService sysUserService;

  @RequestMapping("captcha.jpg")
  public void captcha(HttpServletResponse response, HttpServletRequest request)
      throws ServletException, IOException {
    response.setHeader("Cache-Control", "no-store, no-cache");
    response.setContentType("image/jpeg");

    // 生成文字验证码
    String text = producer.createText();
    // 生成图片验证码
    BufferedImage image = producer.createImage(text);
    // 保存到shiro session
    ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);
    ServletOutputStream out = response.getOutputStream();
    ImageIO.write(image, "jpg", out);
    out.flush();
  }

  /**
   * 登录
   */
  @ResponseBody
  @RequestMapping(value = "/sys/login", method = RequestMethod.POST)
  public R login(String username, String password, String captcha, HttpServletRequest request)
      throws IOException {
    String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
    if (!captcha.equalsIgnoreCase(kaptcha)) {
      return R.error("验证码不正确");
    }
    try {
      Subject subject = ShiroUtils.getSubject();
      // sha256加密
      UsernamePasswordToken token = new UsernamePasswordToken(username, password);
      subject.login(token);
      return R.ok();
    } catch (Exception ex) {
      return R.error("登陆失败");
    }

  }

  /**
   * 退出
   */
  @RequestMapping(value = "/logout", method = RequestMethod.GET)
  public String logout(HttpServletRequest request) {
    ShiroUtils.logout();
    return "login";
  }

  @RequestMapping("/")
  public String index(HttpServletRequest request) {
    return "sys/index";
  }

  @RequestMapping("/manage")
  public String manageIndex(HttpServletRequest request) {
    return "sys/index";
  }

  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public String loginIndex(HttpServletRequest request) {
    return "login";
  }
}
